Application of formal methods for testing a software program, a communication protocol, a processing system, and the like is a challenging task. Before formal methods can be applied, a high level model of the software program, protocol, or system is created using, for example, Petri net modeling techniques. A Petri net model is a graphical and mathematical model that may be used to represent many types of systems. By having a graphical and mathematical model of an embedded system software program, for example, various formal methods for testing of the modeled system may be used. For example, formal test specifications may be created based on the Petri net model and used to test the software program.
Once a high level Petri net model is created, it may be necessary to unfold it. Unfolding is a partial-order based method for the verification of concurrent systems, such as software or electronic systems. An unfolding process may cause a state space for a network to grow to an unmanageable size due to redundancy. Thus, the computational requirements of the unfolding process increase non-linearly with the increase in size of input net.